🐍 Introduzione alla Programmazione in Python

Il primo passo nel mondo della programmazione

1. Cos'è Python e perché impararlo?

Python è un linguaggio di programmazione interpretato creato da Guido van Rossum nel 1991. Il nome "Python" deriva dalla passione del creatore per i Monty Python, non dal serpente! Python si distingue per la sua sintassi chiara e leggibile, che lo rende ideale per chi inizia a programmare.

📘 Cosa significa "interpretato"?

A differenza dei linguaggi compilati (come C o Java), Python non viene trasformato completamente in linguaggio macchina prima dell'esecuzione. L'interprete Python legge ed esegue il codice linea per linea, traduce le istruzioni e le esegue immediatamente. Questo rende lo sviluppo più veloce e interattivo, anche se l'esecuzione può essere leggermente più lenta rispetto ai linguaggi compilati.

Perché Python è così popolare?

2. Il primo programma: "Hello, World!"

La tradizione nella programmazione vuole che il primo programma scritto in un nuovo linguaggio sia un semplice messaggio di saluto. In Python, questo è estremamente semplice:

print("Hello, World!")
✅ Cosa fa questo codice?

La funzione print() è una funzione built-in (integrata) di Python che visualizza a schermo il contenuto che le passiamo tra le parentesi. In questo caso, stampa la stringa di testo "Hello, World!".

Esempio pratico

Prova a modificare il messaggio:

print("Benvenuto nel mondo di Python!")
print("Questo è il mio primo programma")
print("La programmazione è divertente!")

Output:

Benvenuto nel mondo di Python!
Questo è il mio primo programma
La programmazione è divertente!

3. Variabili: contenitori per i dati

Una variabile è un contenitore che conserva un valore in memoria. Immagina le variabili come delle scatole etichettate: ogni scatola ha un nome (l'etichetta) e contiene un valore (il contenuto della scatola).

Anatomia di una variabile

nome_variabile = valore
⬇️

nome_variabile: identificatore univoco
= operatore di assegnazione
valore: il dato da memorizzare

Regole per i nomi delle variabili

⚠️ Regole obbligatorie:
  • Possono contenere lettere (a-z, A-Z), numeri (0-9) e underscore (_)
  • NON possono iniziare con un numero
  • NON possono contenere spazi
  • NON possono essere parole riservate di Python (come if, for, while, class, ecc.)
  • Python è case-sensitive: nome, Nome e NOME sono tre variabili diverse
Validi ✅ Non validi ❌ Motivo
nome 2nome Inizia con un numero
eta_studente età studente Contiene spazio e carattere accentato
prezzo_totale prezzo-totale Il trattino non è permesso
risultato1 for Parola riservata di Python
_valore_privato class Parola riservata di Python
Esempi di assegnazione
# Assegnare un numero intero
eta = 18

# Assegnare un numero decimale
altezza = 1.75

# Assegnare una stringa di testo
nome = "Marco"

# Assegnare un valore booleano (vero/falso)
iscritto = True

# Stampare le variabili
print(nome)          # Output: Marco
print(eta)           # Output: 18
print(altezza)       # Output: 1.75
print(iscritto)      # Output: True
🔑 Concetto chiave: Tipizzazione dinamica

Python è un linguaggio a tipizzazione dinamica. Questo significa che non è necessario dichiarare esplicitamente il tipo di dato di una variabile: Python lo deduce automaticamente dal valore assegnato. La stessa variabile può anche cambiare tipo durante l'esecuzione del programma:

x = 10        # x è un intero
x = "ciao"    # ora x è una stringa
x = 3.14      # ora x è un float

4. Tipi di dati fondamentali

Python supporta diversi tipi di dati, ognuno con caratteristiche specifiche. I tipi fondamentali sono:

4.1 Numeri interi (int)

Gli interi rappresentano numeri senza parte decimale, sia positivi che negativi. Python gestisce automaticamente numeri interi di qualsiasi dimensione (limitati solo dalla memoria disponibile).

numero_positivo = 42
numero_negativo = -17
numero_grande = 1000000000000
zero = 0

4.2 Numeri decimali (float)

I float (floating point numbers) rappresentano numeri con la virgola decimale. In programmazione si usa il punto, non la virgola.

pi_greco = 3.14159
temperatura = -5.5
percentuale = 0.95
notazione_scientifica = 1.5e3  # equivale a 1500.0
⚠️ Attenzione alla precisione!

I numeri float hanno una precisione limitata a causa di come vengono rappresentati in memoria. Operazioni su numeri decimali possono produrre risultati con piccole imprecisioni:

print(0.1 + 0.2)  # Output: 0.30000000000000004

Per calcoli che richiedono precisione assoluta (come operazioni monetarie), esistono librerie apposite come decimal.

4.3 Stringhe (str)

Le stringhe rappresentano sequenze di caratteri, ovvero testo. Si possono definire usando virgolette singole (') o doppie ("), o triple virgolette per stringhe su più righe.

# Stringhe con virgolette singole o doppie
messaggio1 = 'Ciao a tutti'
messaggio2 = "Python è fantastico"

# Stringhe su più righe
testo_lungo = """Questa è una stringa
che si estende su
più righe"""

# Caratteri speciali
saluto = "Ciao,\ncome stai?"  # \n crea una nuova riga
percorso = "C:\\Users\\Documents"  # \\ rappresenta un backslash
📘 Quando usare singole o doppie?

Non c'è differenza funzionale tra virgolette singole e doppie. È una questione di stile e comodità. Se la tua stringa contiene virgolette, puoi usare l'altro tipo per evitare di doverle "escaped":

frase1 = "L'Italia è bella"        # comodo con l'apostrofo
frase2 = 'Lui disse: "Ciao"'      # comodo con le virgolette

4.4 Booleani (bool)

I booleani rappresentano valori di verità: possono essere solo True (vero) o False (falso). Sono fondamentali per il controllo del flusso del programma.

maggiorenne = True
piove = False
ha_patente = True

# I booleani sono spesso il risultato di confronti
risultato = 5 > 3      # True
uguale = 10 == 20      # False
🔑 La funzione type()

Per scoprire il tipo di dato di una variabile, Python fornisce la funzione type():

x = 42
print(type(x))        # Output: <class 'int'>

y = 3.14
print(type(y))        # Output: <class 'float'>

z = "Hello"
print(type(z))        # Output: <class 'str'>

w = True
print(type(w))        # Output: <class 'bool'>

5. Commenti: documentare il codice

I commenti sono porzioni di testo che l'interprete Python ignora completamente. Servono a spiegare il codice agli esseri umani (incluso te stesso nel futuro!). Un buon codice è sempre ben commentato.

# Questo è un commento su singola riga
# I commenti iniziano con il simbolo #

eta = 18  # Puoi mettere commenti anche alla fine di una riga di codice

"""
Questo è un commento
su più righe, utile per
spiegazioni più lunghe
"""

# ATTENZIONE: i commenti NON vengono eseguiti
# print("Questo non verrà stampato")
print("Questo sì")  # Solo questa riga viene eseguita
✅ Best practice per i commenti:
  • Spiega il perché, non il cosa (il codice stesso mostra cosa fa)
  • Mantieni i commenti aggiornati quando modifichi il codice
  • Usa commenti per suddividere sezioni logiche del programma
  • Evita commenti ovvi come: x = 5 # assegno 5 a x

6. Input e Output

6.1 Output con print()

Abbiamo già visto print(), ma questa funzione ha molte più capacità di quanto sembri.

# Stampare più valori
nome = "Luca"
eta = 20
print("Mi chiamo", nome, "e ho", eta, "anni")
# Output: Mi chiamo Luca e ho 20 anni

# Usare f-strings (metodo moderno e consigliato)
print(f"Mi chiamo {nome} e ho {eta} anni")

# Stampare senza andare a capo
print("Prima parte", end=" ")
print("Seconda parte")
# Output: Prima parte Seconda parte

# Specificare un separatore diverso
print("Uno", "Due", "Tre", sep=" - ")
# Output: Uno - Due - Tre
📘 F-strings: il modo migliore per formattare

Le f-strings (formatted string literals) sono il metodo più leggibile e performante per inserire variabili nelle stringhe. Si creano mettendo una f prima delle virgolette e usando {} per inserire le variabili:

prezzo = 19.99
quantita = 3
totale = prezzo * quantita

print(f"Prezzo unitario: €{prezzo}")
print(f"Quantità: {quantita}")
print(f"Totale: €{totale:.2f}")  # .2f formatta con 2 decimali
# Output: Totale: €59.97

6.2 Input dall'utente con input()

La funzione input() permette al programma di ricevere dati dall'utente. Il programma si ferma e aspetta che l'utente digiti qualcosa e prema Invio.

# Input semplice
nome = input("Come ti chiami? ")
print(f"Ciao {nome}!")

# IMPORTANTE: input() restituisce SEMPRE una stringa!
eta_stringa = input("Quanti anni hai? ")
print(type(eta_stringa))  # Output: <class 'str'>
⚠️ Conversione dei tipi

Dato che input() restituisce sempre una stringa, se vuoi fare calcoli matematici devi convertire il tipo:

# SBAGLIATO - tenterà di concatenare stringhe
eta = input("Quanti anni hai? ")  # utente digita: 20
anni_futuri = eta + 5
# Errore! Non puoi sommare una stringa e un numero

# CORRETTO - conversione esplicita
eta = int(input("Quanti anni hai? "))  # converte in intero
anni_futuri = eta + 5
print(f"Tra 5 anni avrai {anni_futuri} anni")  # Output: 25

7. Operatori aritmetici

Python supporta tutti gli operatori matematici standard, più alcuni operatori speciali.

Operatore Significato Esempio Risultato
+ Addizione 10 + 3 13
- Sottrazione 10 - 3 7
* Moltiplicazione 10 * 3 30
/ Divisione (risultato float) 10 / 3 3.333...
// Divisione intera 10 // 3 3
% Modulo (resto) 10 % 3 1
** Elevamento a potenza 10 ** 3 1000
Esempi pratici di operazioni
# Calcolo dell'area di un rettangolo
base = 5
altezza = 3
area = base * altezza
print(f"L'area del rettangolo è {area}")  # Output: 15

# Convertire temperatura da Celsius a Fahrenheit
celsius = 25
fahrenheit = (celsius * 9/5) + 32
print(f"{celsius}°C = {fahrenheit}°F")  # Output: 25°C = 77.0°F

# Verificare se un numero è pari (il resto della divisione per 2 è 0)
numero = 17
resto = numero % 2
print(f"Il resto è {resto}")  # Output: 1 (quindi dispari)

# Calcolare interesse composto
capitale = 1000
tasso = 0.05  # 5%
anni = 3
montante = capitale * (1 + tasso) ** anni
print(f"Dopo {anni} anni: €{montante:.2f}")  # Output: €1157.63
🔑 Ordine delle operazioni (precedenza)

Come in matematica, Python segue un ordine di precedenza nelle operazioni:

  1. Parentesi: ()
  2. Elevamento a potenza: **
  3. Moltiplicazione, divisione, modulo: *, /, //, %
  4. Addizione e sottrazione: +, -
risultato = 2 + 3 * 4     # 14 (non 20!)
risultato = (2 + 3) * 4   # 20 (le parentesi hanno priorità)
risultato = 2 ** 3 ** 2   # 512 (elevamento a potenza associa da destra)

8. Operatori di assegnazione composti

Python offre operatori che combinano un'operazione con un'assegnazione, rendendo il codice più conciso.

Operatore Equivalente a Esempio
x += 5 x = x + 5 Incrementa x di 5
x -= 3 x = x - 3 Decrementa x di 3
x *= 2 x = x * 2 Raddoppia x
x /= 4 x = x / 4 Divide x per 4
x //= 3 x = x // 3 Divisione intera per 3
x %= 5 x = x % 5 x diventa il resto della divisione per 5
x **= 2 x = x ** 2 Eleva x al quadrato
# Esempio pratico: contatore
punteggio = 0
print(f"Punteggio iniziale: {punteggio}")

punteggio += 10  # prima azione
print(f"Dopo la prima azione: {punteggio}")  # 10

punteggio += 5   # seconda azione
print(f"Dopo la seconda azione: {punteggio}")  # 15

punteggio *= 2   # bonus doppio
print(f"Con bonus doppio: {punteggio}")  # 30

9. Conversioni di tipo (Type Casting)

Spesso è necessario convertire un valore da un tipo a un altro. Python fornisce funzioni di conversione esplicite.

Funzioni di conversione principali

Esempi di conversione
# Conversione da stringa a numero
testo_numero = "42"
numero = int(testo_numero)
print(numero + 8)  # Output: 50

# Conversione da numero a stringa
eta = 25
messaggio = "Ho " + str(eta) + " anni"
print(messaggio)  # Output: Ho 25 anni

# Conversione tra int e float
intero = 10
decimale = float(intero)
print(decimale)  # Output: 10.0

decimale2 = 9.7
intero2 = int(decimale2)  # ATTENZIONE: tronca, non arrotonda!
print(intero2)  # Output: 9

# Conversione a booleano
print(bool(1))      # True
print(bool(0))      # False
print(bool(""))     # False (stringa vuota)
print(bool("ciao")) # True (stringa non vuota)
⚠️ Conversioni rischiose

Non tutte le conversioni sono possibili. Se provi a convertire una stringa non numerica in un numero, Python solleverà un errore:

# Questo causerà un errore!
numero = int("ciao")  # ValueError: invalid literal for int()

# Funziona solo con stringhe che rappresentano numeri
numero_valido = int("123")  # OK
numero_float = float("3.14")  # OK

10. Funzioni built-in utili

Python include molte funzioni built-in (integrate nel linguaggio) pronte all'uso. Ecco le più importanti per iniziare:

Funzione Descrizione Esempio
len(x) Restituisce la lunghezza di x len("Python")6
abs(x) Valore assoluto di x abs(-10)10
round(x, n) Arrotonda x a n decimali round(3.14159, 2)3.14
max(a, b, c, ...) Restituisce il valore massimo max(5, 2, 9, 1)9
min(a, b, c, ...) Restituisce il valore minimo min(5, 2, 9, 1)1
pow(x, y) x elevato alla y pow(2, 3)8
help(x) Mostra la documentazione di x help(print)
# Esempi pratici
parola = "Programmazione"
print(f"La parola '{parola}' ha {len(parola)} lettere")  # 14 lettere

temperatura = -5.7
print(f"Temperatura assoluta: {abs(temperatura)}")  # 5.7

prezzo = 19.876
print(f"Prezzo arrotondato: €{round(prezzo, 2)}")  # €19.88

voti = [18, 25, 30, 22, 28]
print(f"Voto massimo: {max(voti)}")  # 30
print(f"Voto minimo: {min(voti)}")  # 18

11. Il primo programma completo

Mettiamo insieme tutto ciò che abbiamo imparato in un programma completo e funzionale.

Calcolatore di IMC (Indice di Massa Corporea)
# Programma per calcolare l'Indice di Massa Corporea (IMC)

print("=" * 50)
print("CALCOLATORE IMC")
print("=" * 50)
print()

# Input dei dati dall'utente
nome = input("Come ti chiami? ")
peso = float(input("Inserisci il tuo peso in kg: "))
altezza = float(input("Inserisci la tua altezza in metri: "))

# Calcolo dell'IMC
imc = peso / (altezza ** 2)

# Arrotondamento a 2 decimali
imc_arrotondato = round(imc, 2)

# Output del risultato
print()
print("=" * 50)
print(f"Ciao {nome}!")
print(f"Il tuo IMC è: {imc_arrotondato}")

# Interpretazione del risultato
if imc < 18.5:
    categoria = "Sottopeso"
elif imc < 25:
    categoria = "Normopeso"
elif imc < 30:
    categoria = "Sovrappeso"
else:
    categoria = "Obesità"

print(f"Categoria: {categoria}")
print("=" * 50)

Esempio di esecuzione:

==================================================
CALCOLATORE IMC
==================================================

Come ti chiami? Marco
Inserisci il tuo peso in kg: 75
Inserisci la tua altezza in metri: 1.80

==================================================
Ciao Marco!
Il tuo IMC è: 23.15
Categoria: Normopeso
==================================================
🎯 Quiz di Autovalutazione

1. Quale delle seguenti è una variabile valida in Python?

  • a) 2studente
  • b) nome-studente
  • c) nome_studente
  • d) for

2. Qual è il risultato di: 10 // 3?

  • a) 3.33
  • b) 3
  • c) 1
  • d) 4

3. Cosa restituisce type("42")?

  • a) <class 'int'>
  • b) <class 'float'>
  • c) <class 'str'>
  • d) <class 'bool'>

4. Qual è il risultato di: 2 + 3 * 4?

  • a) 20
  • b) 14
  • c) 24
  • d) Errore

5. Cosa fa la funzione input()?

  • a) Stampa un valore a schermo
  • b) Legge un numero dall'utente
  • c) Legge una stringa dall'utente ✅
  • d) Converte una stringa in intero

12. Best Practices e Consigli

✅ Suggerimenti per scrivere buon codice Python:
  • Nomi descrittivi: Usa nomi di variabili che spieghino il loro scopo (eta_studente è meglio di x)
  • Convenzione snake_case: Per le variabili in Python si usa lo snake_case: nome_completo, prezzo_totale
  • Costanti in MAIUSCOLO: I valori che non cambiano si scrivono in maiuscolo: PI_GRECO = 3.14159
  • Spazi e leggibilità: Usa spazi intorno agli operatori: x = 5 + 3 invece di x=5+3
  • Commenta il complesso: Spiega la logica complessa, non l'ovvio
  • Una cosa alla volta: Ogni riga dovrebbe fare una cosa chiara
  • Testa frequentemente: Esegui il codice spesso per verificare che funzioni come ti aspetti
📘 Errori comuni dei principianti:
  • Confondere = con ==: = è assegnazione, == è confronto
  • Dimenticare le virgolette: print(Ciao) darà errore, serve print("Ciao")
  • Dimenticare di convertire input: input() restituisce sempre stringhe!
  • Sbagliare l'indentazione: Python usa l'indentazione per strutturare il codice
  • Non leggere i messaggi di errore: Gli errori di Python sono informativi, leggili!

13. Esercizi Pratici

🎓 Esercizi per consolidare le conoscenze

Esercizio 1 - Base: Scrivi un programma che chieda nome ed età all'utente e stampi: "Ciao [nome], tra 10 anni avrai [età+10] anni"

Esercizio 2 - Medio: Crea un convertitore di valuta che chieda un importo in Euro e lo converta in Dollari (usa il tasso: 1€ = 1.18$)

Esercizio 3 - Medio: Scrivi un programma che calcoli il perimetro e l'area di un rettangolo date base e altezza inserite dall'utente

Esercizio 4 - Avanzato: Crea un programma che calcoli il prezzo finale di un prodotto dopo aver applicato uno sconto percentuale. Chiedi all'utente il prezzo originale e la percentuale di sconto.

Esercizio 5 - Sfida: Scrivi un programma che calcoli quanti secondi ci sono in un certo numero di giorni, ore, minuti inseriti dall'utente

14. Risorse per approfondire

📚 Dove continuare il tuo percorso:
  • Documentazione ufficiale: docs.python.org/it
  • Tutorial interattivi: Cerca "Python tutorial" su piattaforme come Codecademy o freeCodeCamp
  • Pratica: Risolvi problemi su HackerRank, LeetCode, o Codewars
  • Comunità: Partecipa a forum come Stack Overflow o Reddit r/learnpython
🎯 Prossimi passi nel tuo percorso:

Dopo aver padroneggiato questi concetti fondamentali, sarai pronto per affrontare:

  • Strutture di controllo (if, elif, else)
  • Cicli (while, for)
  • Strutture dati (liste, tuple, dizionari, set)
  • Funzioni
  • Moduli e package
  • Programmazione orientata agli oggetti